python Tkinter包 用户交互页面 (Userinterface) GUI开发项目实战

您所在的位置:网站首页 python gui库有中文版的吗 python Tkinter包 用户交互页面 (Userinterface) GUI开发项目实战

python Tkinter包 用户交互页面 (Userinterface) GUI开发项目实战

2023-07-07 09:08| 来源: 网络整理| 查看: 265

实习期间做的第一个项目:部分demo展示

Package install:

首先需要准备好相应的包,没有的自行下载 本人使用的版本如下: 库名称 版本 tkinter 8.6 requests ‘2.30.0’ PIL ‘9.5.0’ os sys

import tkinter as tk import tkinter.messagebox from download import MainPage from tkinter import * from tkinter import ttk import requests as rb import re # 正则 from PIL import Image,ImageTk 实现部分:

接下来的class,就是登录的交互主页面 下拉选择框实现的部分是在Combobox部分: 图片的功能主要通过canvas来实现 canvas代码的区域决定了图片的存放位置

class LoginPage: def _init__(self,master): self.root = master root.title('单据小程序') self.page = tk.Frame(self.root) photo = Image.open("image/1.gif") photo = photo.resize((80,80)) tk_img=ImageTk.PhotoImage(photo) self.values = ["广州","深圳","东莞","佛山","汕头","惠州","中山","江门","肇庆", "珠海","韶关","茂名","清远","梅州","阳江","湛江","潮州","揭阳","河源","汕尾","云浮"] self.value1 = tk.StringVar(value="选择城市") self.Combobox = ttk.Combobox( master=self.root, height=5, width=8, state='readonly', cursor='arrow', font=('Arial', 10), textvariable=self.value1, values=self.values, ) self.Combobox.grid(row=2, column=0) self.page.grid() self.root.geometry("400x240") # tkinter 提供的可变变量 self.phone = tk.StringVar() self.smsCode = tk.StringVar() # self.URL = 'http://localhost:8889' self.URL = 'https://sss.zhixuept.com:9090/api' self.button = "active" tk.Label(self.page, text='账 号:').grid(row=1, column=0) tk.Entry(self.page, textvariable=self.phone).grid(row=1, column=1) tk.Label(self.page,text='').grid(row=2,column=0) tk.Label(self.page,text='验证码:').grid(row=3,column=0) tk.Entry(self.page,textvariable=self.smsCode).grid(row=3,column=1) tk.Label(self.page,text=' ').grid(row=3,column=2) tk.Button(self.page,text="获取验证码",command=self.toSendSms,state="normal").grid(row=3,column=2) tk.Label(self.page,text='').grid(row=4,column=0) tk.Button(self.page,text='登 录',command=self.login_check).grid(row=5,column=0,pady=10) tk.Button(self.page,text='退 出',command=self.login_out).grid(row=5,column=1,pady=10,sticky=tk.E) canvas=tk.Canvas(self.page) canvas.create_image(0,0,anchor="nw",image=tk_img) tk.Label(self.page,text='').grid(row=5,column=2) tk.Label(self.page,text='').grid(row=5,column=3) #canvas.grid(row=6, column=3, padx=(0, 10)) canvas.grid(row=6, column=3) # canvas.move(1,50,-150) root.mainloop()

然后的函数包括登录检查,这里写了几个exceptional的检测与处理

def login_check(self): phone = self.phone.get() smsCode = self.smsCode.get() tenant = self.value1.get() if smsCode != '' and phone != '': pattern = r'^1[3-9]\d{9}$' if re.match(pattern, phone): params = {'username':phone,'tenant':tenant,'code':smsCode} res = rb.get(url=self.URL+"/sms/file/msmLogin",params=params) aa = eval(res.content) if aa['code'] == 200: tkinter.messagebox.showinfo(title="tip",message="登录成功!") self.page.destroy() self.Combobox.destroy() MainPage()._inint__(self.root,aa['data']) else: tkinter.messagebox.showinfo(title="tip",message=aa['msg']) else: tkinter.messagebox.showinfo(title="2",message="账号或密码错误!")

发送验证码的函数:

def toSendSms(self): self.button = "disabled" phone = self.phone.get() tenant = self.value1.get() if self.phone != '' and tenant != '': pattern = r'^1[3-9]\d{9}$' if re.match(pattern, phone): params = {'mobile':phone,'tenant':tenant} res = rb.get(url=self.URL+"/sms/file/doSendSms",params=params) aa = eval(res.content) print(aa) if aa['code'] == 200: tkinter.messagebox.showinfo(title="tip",message="发送成功!") else: tkinter.messagebox.showinfo(title="tip",message=aa['msg']) else: tkinter.messagebox.showinfo(title="tip",message="账号格式错误!") else: tkinter.messagebox.showinfo(title="tip",message="请输入账号和选择所属单位!")

登出函数:

def login_out(self): self.root.destroy()

最后是程序实现与使用:

if __name__ == '__main__': root = tk.Tk() LoginPage()._init__(root) root.mainloop()

运行结果: 在这里插入图片描述

感想:

Python的交互页面,界面优化还是比较难做,需要花时间调整text label的位置,grid和pack在同一个容器当中不能同时出现,这是本程序在调试过程中经常遇到的报错 验证码的实现是由特定API提供发送,不在本篇讨论重点

整体编辑较为简易,如果程序员具备一定HTML的基础



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3